<?php
// +----------------------------------------------------------------------
// | 海豚PHP框架 [ DolphinPHP ]
// +----------------------------------------------------------------------
// | 版权所有 2016~2017 河源市卓锐科技有限公司 [ http://www.zrthink.com ]
// +----------------------------------------------------------------------
// | 官方网站: http://dolphinphp.com
// +----------------------------------------------------------------------
// | 开源协议 ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------

namespace app\admin\controller;

use app\common\builder\ZBuilder;
use app\admin\model\Area as AreaModel;
use think\Db;

/**
 * 区域管理控制器
 * @package app\admin\controller
 */
class Area extends Admin
{
    /**
     * 地区列表
     * @author 陈梦晨 <2391157750@qq.com>
     * @return mixed
     */
    public function index()
    {
       // 查询
        $map = $this->getMap();
        $pid=input('pid',0,'intval');
        $pagetitle="地区列表";
        if($pid){
            $map['pid']=$pid;
            $pagetitle=db("admin_area")->where('id',$pid)->value('name');
        }else{
            $map['pid']=0;
        }

        
        // 排序
        $order = $this->getOrder('id asc');
        // 数据列表
        $data_list = AreaModel::getAll($map, $order);
        // 分页数据
        $page = $data_list->render();

        // 使用ZBuilder快速创建数据表格
        return ZBuilder::make('table')
            ->setPageTitle($pagetitle) // 设置页面标题
            ->setSearch(['name' => '区域名称']) // 设置搜索框
            ->addTopButton('add') // 添加顶部按钮
            ->addTopButton('enable') // 添加顶部按钮
            ->addTopButton('disable') // 添加顶部按钮
            ->addColumns([ // 批量添加数据列
                ['id', '编号'],
                ['name', '区域名称', 'text.edit'],
                ['listorder', '排序', 'text.edit'],
                ['status', '状态', 'switch'],
                ['right_button', '操作', 'btn']
            ])
            ->addOrder(['listorder', 'id'])
            ->addRightButton('add', ['class'=>'btn btn-xs btn-default','icon' => 'fa fa-plus', 'title' => '添加下级地区', 'href' => url('add', ['pid' => '__id__'])])
            ->addRightButton('edit', ['class'=>'btn btn-xs btn-default','icon' => 'fa fa-pencil', 'title' => '编辑', 'href' => url('edit', ['id' => '__id__'])])
            ->addRightButton('delete',['class'=>'btn btn-xs btn-default','icon' => 'fa fa-times', 'title' => '删除', 'href' => url('delete', ['id' => '__id__'])])
            ->addRightButton('index',['class'=>'btn btn-xs btn-default','icon' => 'fa fa-fw fa-sitemap', 'title' => '查看下级地区', 'href' => url('index', ['pid' => '__id__'])])
            ->setRowList($data_list) // 设置表格数据
            ->setPages($page) // 设置分页数据
            ->fetch(); // 渲染模板
    }

    /**
     * 编辑地区
     * @param null $id 地区id
     * @author 陈梦晨 <2391157750@qq.com>
     */
    public function edit($id = null)
    {
        if ($id === null) return $this->error('缺少参数');
        $info = AreaModel::find(['id' => $id]);

        $list_province = db("admin_area")->where("pid=0")->column("id,name");
        // 使用ZBuilder快速创建表单
        return ZBuilder::make('form')
            ->setPageTitle('编辑') // 设置页面标题
            ->setUrl(url('dosave'))
            ->addFormItems([ // 批量添加表单项
                 ['hidden', 'id'],
                 ['text', 'name', '地区名称'],
            ])
            ->addRadio('status', '状态', '', [0 => '禁用', 1 => '启用'])
            ->addText('listorder','排序')
            ->setFormData($info) // 设置表单数据
            ->layout([ 'listorder'=> 3])
            ->fetch();
            
    }
    public function dosave(){
        // 保存数据
        if ($this->request->isPost()) {
            $data = $this->request->post();
            
            // 验证
            $result = $this->validate($data, 'Area');
            // 验证失败 输出错误信息
            if(true !== $result) return $this->error($result);

            if ($menu = AreaModel::update($data)) {
                return $this->success('修改成功', url('index'));
            } else {
                return $this->error('修改失败');
            }
        }
    }
    /**
     * 新增地区
     * @param null $id 地区id
     * @author 陈梦晨 <2391157750@qq.com>
     */

    public function add($pid = null){
        $list_province = db("admin_area")->where("pid=0")->column("id,name");
        // 使用ZBuilder快速创建表单
        return ZBuilder::make('form')
            ->setPageTitle('新增') // 设置页面标题
            ->setUrl(url('doadd'))
            ->addFormItems([ // 批量添加表单项
                 ['text', 'name', '地区名称'],
            ])
            ->addRadio('status', '状态', '', [0 => '禁用', 1 => '启用'])
            ->addText('listorder','排序')
            ->addHidden("pid",!empty($pid)?$pid:0)
            ->layout(['listorder'=> 3])
            ->fetch();
    }
    public function doadd(){
        // 保存数据
        if ($this->request->isPost()) {
            $data = $this->request->post();
            
            // 验证
            $result = $this->validate($data, 'Area');
            // 验证失败 输出错误信息
            if(true !== $result) return $this->error($result);

            if ($menu = AreaModel::create($data)) {
                return $this->success('新增成功', url('index'));
            } else {
                return $this->error('新增失败');
            }
        }

    }

    /**
     * 删除地区
     * @author 陈梦晨 <2391157750@qq.com>
     * @return mixed
     */
    public function delete($record = [])
    {
        $id = $this->request->param('id');
        // 删除节点
        if (AreaModel::destroy($id)) {
            return $this->success('删除成功');
        } else {
            return $this->error('删除失败');
        }
    }

    /**
     * 设置状态
     * @param string $type 状态类型:enable/disable
     * @param array $record 行为日志内容
     * @author 陈梦晨 <2391157750@qq.com>
     * @return mixed
     */
    public function setStatus($type = '', $record = [])
    {
        $ids = $this->request->isPost() ? input('post.ids/a') : input('param.ids');
        if (empty($ids)) return $this->error('缺少主键');

        if(AreaModel::$type($ids)){
            return $this->success('操作成功');
        }else{
            return $this->error('操作失败');
        }
            
    }

    /**
     * 禁用
     * @param array $record 行为日志内容
     * @author 陈梦晨 <2391157750@qq.com>
     * @return mixed
     */
    public function disable($record = [])
    {
        return $this->setStatus('disable');
    }

    /**
     * 启用
     * @param array $record 行为日志内容
     * @author 陈梦晨 <2391157750@qq.com>
     * @return mixed
     */
    public function enable($record = [])
    {
        return $this->setStatus('enable');
    }
    public function get_city($province = '') {
        $result = db("admin_area")->where("pid=" . $province)->field("id,name")->select();
        $list=[];
        foreach ($result as $key => $value) {
            # code...
            $list[$key]['key']=$value['id'];
            $list[$key]['value']=$value['name'];
        }
        
        $arr['code'] = '1'; //判断状态
        $arr['msg'] = '请求成功'; //回传信息
        $arr['list'] = $list; //数据
        return json($arr);
    }

    public function get_area($city = '') {
        $result = db("admin_area")->where("pid=" . $city)->field("id,name")->select();
        $list=[];
        foreach ($result as $key => $value) {
            # code...
            $list[$key]['key']=$value['id'];
            $list[$key]['value']=$value['name'];
        }
        
        $arr['code'] = '1'; //判断状态
        $arr['msg'] = '请求成功'; //回传信息
        $arr['list'] = $list; //数据
        return json($arr);
        return json($arr);
    }

    public function test(){
        $area=Db::name("area")->where('pid',0)->order('id')->select();
        foreach ($area as $key => $value) {
            # code...
            $pid1=Db::name('admin_area')->insertGetId([
                'pid'=>0,
                'name'=>$value['name']
            ]);
            $subarea=Db::name("area")->where('pid',$value['id'])->order('id')->select();
            foreach ($subarea as $ke => $valu) {
                $pid2=Db::name('admin_area')->insertGetId([
                    'pid'=>$pid1,
                    'name'=>$valu['name']
                ]);
                $subarea1=Db::name("area")->where('pid',$valu['id'])->order('id')->select();
                foreach ($subarea1 as $k => $val) {
                    Db::name('admin_area')->insert([
                        'pid'=>$pid2,
                        'name'=>$val['name']
                    ]);
                    
                }
            }
        }
    }
    
}